package q530_getMinimumDifference;

import CommonClass.Common.TreeNode;
public class Solution_2 {
    /**
     * 了解了中序遍历能够解决该问题
     * 我们简化为如何在中序遍历的过程中求最小值
     * 首先要了解最小值不一定出现在两个相邻的两个节点
     * 例如 8
     *   1
     *     9
     * 最小值为1
     * 所以我们需要使用中序遍历来解决
     * @param root
     * @return
     */

    int minVal = Integer.MAX_VALUE;
    // 这里需要一个节点专门记录上一个节点
    TreeNode preNode;
    public int getMinimumDifference(TreeNode root) {
        dfs(root);
        return minVal;
    }

    private void dfs(TreeNode root) {
        if (root == null) {
            return;
        }
        // 中序遍历的顺序
        // 左
        dfs(root.left);

        // 中
        if (preNode != null) {
            // 按照中序遍历 当前节点一定大于上一个
            minVal = Math.min(minVal, root.val - preNode.val);
        }
        // 更新pre
        preNode = root;
        // 右
        dfs(root.right);
    }
}
